package interfaces;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.List;

import dto.CargaDTO;
import dto.EmpresaDTO;
import dto.EnvioDTO;
import dto.ParticularDTO;
import dto.ClienteDTO;
import dto.ProductoDTO;
import dto.RemitoDTO;
import dto.SucursalDTO;
import dto.TamanioDTO;
import dto.TipoTransporteDTO;
import dto.UbicacionDTO;
import dto.VehiculoDTO;

public interface InterfaceRemota extends Remote
{

	public void testUbicacion(UbicacionDTO ubicacion) throws RemoteException;
	
	
	// METODOS DE PRE CARGA DE DATOS
	public List <TamanioDTO> loadTamanios() throws RemoteException;
	
	public TamanioDTO loadTamanio(int id) throws RemoteException;
	public List <SucursalDTO> loadSucursales() throws RemoteException;
	
	public List <TipoTransporteDTO> loadTipos() throws RemoteException;
	
	
	//METODOS CLIENTE
	
	//deberia recibir cualquier tipo de cliente y saber como guardarlo o si hay que hacer update?
	public boolean saveCliente (ClienteDTO cliente) throws RemoteException;	
			
//	public void saveCliente (ParticularDTO cliente) throws RemoteException;
	
	public ClienteDTO LoadCliente (int id) throws RemoteException;
	
	//public boolean eliminarCliente (ClienteDTO cliente); //menos prioritario que los otros
	
	public ParticularDTO LoadParticular (ParticularDTO cliente) throws RemoteException;
	// Este metodo deberia recibir un Particular que contiene solamente el DNI, buscarlo en	
    // la DB y devolver un ParticularDTO con todos los datos de el cliente guardado.
	
	public EmpresaDTO loadEmpresa (EmpresaDTO empresa) throws RemoteException;
	//Igual al anterior, solo que viaja un EmpresaDTO con el CUIT completado

	public List<VehiculoDTO> vehiculosConMantenimiento() throws RemoteException;

	public List<VehiculoDTO> vehiculosSinMantenimiento() throws RemoteException;
	
	public boolean updateMantenimientoVehiculos ( List <String> idVehiculos) throws RemoteException;
	
	public ParticularDTO getParticular(ParticularDTO part) throws RemoteException;; 
	
	public EmpresaDTO getEmpresa(EmpresaDTO empresa) throws RemoteException;;
	
	public boolean agregarEmpresa(EmpresaDTO emp) throws RemoteException;;
	
	public boolean agregarParticular(ParticularDTO par) throws RemoteException;;
	
	public List<ParticularDTO> getParticularList() throws RemoteException;;
	
	public List<EmpresaDTO> getEmpresaList() throws RemoteException;;
	
	public List<CargaDTO> cargasPendientesFacturar() throws RemoteException;;
	
	
//	//METODOS MANIFIESTO
//	public void saveManifiesto (ManifiestoDTO manifiesto) throws RemoteException;
//	
//	//METODOS CARGA
	public void saveCarga (CargaDTO carga) throws RemoteException;
	
	public List<CargaDTO> loadCargas(int dni) throws RemoteException;

	//public List<CargaDTO> loadCargasPendientes() throws RemoteException;  <--- pendiente para reporte

	public List<SucursalDTO> getSucursales() throws RemoteException;


	public List<EnvioDTO> enviosPendienteDePago(EmpresaDTO empresa) throws RemoteException;


	public boolean agregarProductoEmpresa(ProductoDTO prod) throws RemoteException;


	public boolean pagarFactura(RemitoDTO remito) throws RemoteException;

	public RemitoDTO obtenerRemito(int id) throws RemoteException;

	
//	//METODOS ENVIO
//	public void saveEnvio (EnvioDTO envio) throws RemoteException;
//	public EnvioDTO LoadEnvio (int id) throws RemoteException;
//	
//	//METODOS REMITO
//	public void saveRemito (RemitoDTO remito) throws RemoteException;
//	public RemitoDTO LoadRemito (int id) throws RemoteException;
//	
//	//METODOS ITEM REMITO
//	public void saveItemRemito (ItemRemitoDTO itemRemito) throws RemoteException;
//	public ItemRemitoDTO LoadItemRemito (int id) throws RemoteException;
//	
//	//METODOS RUTA
//	public void saveRuta (RutaDTO ruta) throws RemoteException;
//	public RutaDTO LoadRuta (int id) throws RemoteException;
//
//	//METODOS OPERACION MANTENIMIENTO
//	public void saveOperacionMantenimiento (OperacionMantenimientoDTO operacionMantenimiento) throws RemoteException;
//	public OperacionMantenimientoDTO LoadOperacionMantenimiento (int id) throws RemoteException;
//	
//	//METODOS VEHICULOS
//	public void saveVehiculo (VehiculoDTO vehiculo) throws RemoteException;
//	public VehiculoDTO LoadVehiculo (int id) throws RemoteException;
//	public List <VehiculoDTO> getVehiculosMantenimiento () throws RemoteException;
//	
//	//METODOS TIPO TRANSPORTE
//	public void saveTipoTransporte (TipoTransporteDTO tipoTransporte) throws RemoteException;
//	public TipoTransporteDTO LoadTipoTransporte (int id) throws RemoteException;
//	
//	//METODOS PERSONA HABILITADA
//	public void savePersonaHabilitada (PersonaHabilitadaDTO personaHabilitada) throws RemoteException;
//	public PersonaHabilitadaDTO LoadPersonaHabilitada (int id) throws RemoteException;
//	
//	//METODOS CARRIER
//	public void saveCarrier (CarrierDTO carrier) throws RemoteException;
//	public CarrierDTO LoadCarrier (int id) throws RemoteException;
//	public List <CarrierDTO> getCarriers () throws RemoteException;
}